
//
//  MD5String.m
//  huiguigui
//
//  Created by  on 17/4/25.
//  Copyright © 2017年 mac. All rights reserved.
/*
 
 要求如下:
 
 1、获取当前的时间戳[timestamp]，精确到秒
 2、生成一段随机的字符串[nonceStr]，长度为8
 3、按照timestamp + key + nonceStr 的顺序拼接字符串，使用MD5进行加密，生成签名[signature]
 4、把timestamp、nonceStr、signature放入请求头
 
 注意：
 1、每次进行网络访问的时候，都需要重复1、2、3的操作，后台会根据timestamp，自动60秒后拒绝访问，以防止网络盗用。
 2、key为：b6221152956212be030b0cbc0fe9a6a1
 
 */

/*
 通过arc4random() 获取0到x-1之间的整数的代码如下：
 int value = arc4random() % x;
 
 */
#import "MD5String.h"
#import <CommonCrypto/CommonDigest.h>

@implementation MD5String

+ (void)getSignatureStr:(valueBlock)value{

    //获取keyStr
    NSString *keyStr = @"b6221152956212be030b0cbc0fe9a6a1";
    
    //获取时间戳
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0];
    NSTimeInterval interval = [date timeIntervalSince1970];
    NSString *timestamp = [NSString stringWithFormat:@"%0.f", interval];
    
    //获取8位随机字符串
    NSString *nonceStr = [[NSUUID UUID] UUIDString];
    nonceStr = [nonceStr stringByReplacingOccurrencesOfString:@"-"withString:@""];
    nonceStr = [nonceStr substringWithRange:NSMakeRange(arc4random()%(nonceStr.length-8), 8)];
    
    NSString *str = [NSString stringWithFormat:@"%@%@%@",timestamp,keyStr,nonceStr];
    //获取MD5
    const char *original_str = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(original_str, (CC_LONG)strlen(original_str), result);
    NSMutableString *hash = [NSMutableString string];
    for (int i = 0; i < 16; i++)
    {
        [hash appendFormat:@"%02X", result[i]];
    }
    //返回的block
    value(timestamp,nonceStr,hash);
}
@end
